---
id: exec_file
sidebar_position: 4
hide_table_of_contents: true
title: 文件方式
description: Redis 数据源使用 dbVisitor 的全面介绍。以及使用限制。
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

在接口的方法上通过使用 dbVisitor 提供的注解来定义 Redis 命令，这些方法充当数据库访问的媒介，从而避免复杂的操作代码。

:::tip[提示]
在 XML Mapper 文件中，通过 select 标签配置对象序列化映射时，需要指定 resultType 属性才可以正确发现对象上的 BindTypeHandler 注解信息。
:::

<Tabs>
    <TabItem value="a" label="方式 1 借助 BindTypeHandler 注解" default>

        ```java title='1. 定义对象并绑定 JSON 序列化'
        @BindTypeHandler(JsonTypeHandler.class)
        public class UserInfo {
            private String uid;
            private String name;

            ... // 省略 getter/setter 方法
        }
        ```

        ```xml title='2. 定义 Mapper 文件'
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper PUBLIC "-//dbvisitor.net//DTD Mapper 1.0//EN"
        "https://www.dbvisitor.net/schema/dbvisitor-mapper.dtd">
        <mapper namespace="net.test.dto.UserInfoMapper">
            <insert id="saveUser">
                set #{'user_' + uid} #{info}
            </insert>

            <select id="loadUser" resultType="net.test.dto.UserInfo">
                get #{'user_' + uid}
            </select>

            <delete id="deleteUser">
                del #{'user_' + uid}
            </delete>
        </mapper>
        ```

    </TabItem>
    <TabItem value="b" label="方式 2 使用无侵入式">

        ```java title='1. 定义对象，不使用 BindTypeHandler 注解'
        public class UserInfo {
            private String uid;
            private String name;

            ... // 省略 getter/setter 方法
        }
        ```

        ```xml title='2. 定义 Mapper 文件'
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper PUBLIC "-//dbvisitor.net//DTD Mapper 1.0//EN"
        "https://www.dbvisitor.net/schema/dbvisitor-mapper.dtd">
        <mapper namespace="net.test.dto.UserInfoMapper">
            <insert id="saveUser">
                set #{'user_' + uid}
                #{info, typeHandler=net.hasor.dbvisitor.types.handler.json.JsonTypeHandler}
            </insert>

            <!-- 需要同事指定 resultTypeHandler 和 resultType 属性 -->
            <select id="loadUser1"
                    resultTypeHandler="net.hasor.dbvisitor.types.handler.json.JsonTypeHandler"
                    resultType="net.test.dto.UserInfo">
                get #{'user_' + uid}
            </select>

            <select id="loadUser2" resultType="net.test.dto.UserInfo">
                get #{'user_' + uid}
            </select>

            <delete id="deleteUser">
                del #{'user_' + uid}
            </delete>
        </mapper>
        ```

    </TabItem>
</Tabs>

```java title='3. 定义 Mapper 接口'
@RefMapper("dbvisitor/mapper/UserInfoMapper.xml")
public interface UserInfoMapper {
    int saveUser(@Param("info") UserInfo info);

    UserInfo loadUser(@Param("uid") String uid);

    int deleteUser(@Param("uid") String uid);
}
```

```java title='4. 创建通用 Mapper'
// 1，创建 Configuration
Configuration config = new Configuration();

// 2，创建 Session
Session session = config.newSession(dataSource);
或者
Session session = config.newSession(connection);

// 3，创建 UserInfoMapper
UserInfoMapper mapper = session.createMapper(UserInfoMapper.class);
```

## 支持的命令

完整的 Redis 命令支持性可参考 [支持的命令列表](../../drivers/redis/commands)
